package com.yuandian.customer.perception.service.impl;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuandian.api.customer_perception.po.SystemOverviewParams;
import com.yuandian.api.customer_perception.vo.*;
import com.yuandian.api.management.feign.RemoteAreaService;
import com.yuandian.bpm.common.core.constant.CommonConstants;
import com.yuandian.bpm.common.core.util.R;
import com.yuandian.bpm.common.data.resolver.ParamResolver;
import com.yuandian.customer.perception.mapper.MonitorOverviewMapper;
import com.yuandian.customer.perception.service.IMonitorOverviewService;
import com.yuandian.po.MultipleTableInfo;
import com.yuandian.utils.PageDataInfo;
import com.yuandian.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 全系统监控总览service实现类
 * <p>
 *
 * @author lijunhang
 * @date 2021/8/11
 * @since 1.0.0
 */
@Slf4j
@Service
public class MonitorOverviewServiceImpl implements IMonitorOverviewService {

    @Autowired
    private MonitorOverviewMapper monitorOverviewMapper;

    @Autowired
    private RemoteAreaService remoteAreaService;

    /**
     * 全系统总览概况
     * @param params 请求参数
     * @param tableInfos 表名 表信息
     * @return 全系统总览概况数据
     */
    @Override
    public SystemOverviewVo systemOverview(SystemOverviewParams params, List<MultipleTableInfo> tableInfos){

        SystemOverviewVo systemOverviewVo = new SystemOverviewVo();
        // 查询系统总数
        params.setGroupByColumn("system_id");
        int systemCount = monitorOverviewMapper.findAllCount(params, tableInfos);
        systemOverviewVo.setSystemCount(systemCount);

        // 查询系统不健康数
        params.setThreshold(params.getSystemThreshold());
        int systemUnHealthCount = monitorOverviewMapper.findUnHealthCount(params, tableInfos);
        systemOverviewVo.setSystemUnHealthCount(systemUnHealthCount);

        // 查询业务总数
        params.setGroupByColumn("business_code");
        int businessCount = monitorOverviewMapper.findAllCount(params, tableInfos);
        systemOverviewVo.setBusinessCount(businessCount);

        // 查询业务不健康数
        params.setThreshold(params.getBusinessThreshold());
        int businessUnHealthCount = monitorOverviewMapper.findUnHealthCount(params, tableInfos);
        systemOverviewVo.setBusinessUnHealthCount(businessUnHealthCount);

        return systemOverviewVo;
    }


    /**
     * 查询全系统健康度和访问量top5
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 全系统健康度和访问量top5数据
     */
    @Override
    public List<SystemHealthAndVisistTop5Vo> systemHealthAndVisistTop5(SystemOverviewParams params, List<MultipleTableInfo> tableInfos) {
        return monitorOverviewMapper.systemHealthAndVisistTop5(params, tableInfos);
    }


    /**
     * 查询全业务健康度和访问量top5
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 全业务健康度和访问量top5数据
     */
    @Override
    public List<BusinessHealthAndVisistTop5Vo> businessHealthAndVisistTop5(SystemOverviewParams params, List<MultipleTableInfo> tableInfos) {
        return monitorOverviewMapper.businessHealthAndVisistTop5(params, tableInfos);
    }


    /**
     * 全系统总览列表
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 全系统总览列表数据
     */
    @Override
    public PageDataInfo systemOverviewList(SystemOverviewParams params, List<MultipleTableInfo> tableInfos) {

        Page page  =  new Page<>(params.getPageNum(), params.getPageSize());
        List<SystemOverviewListVo> list = monitorOverviewMapper.systemOverviewList(page, params, tableInfos);

        return new PageDataInfo(page, list);
    }


    /**
     * 全系统总览列表下载
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 全系统总览列表下载
     */
    @Override
    public List<SystemOverviewListVo> systemOverviewListExport(SystemOverviewParams params, List<MultipleTableInfo> tableInfos) {
        return monitorOverviewMapper.systemOverviewList(params, tableInfos);
    }


    /**
     * 业务总览列表
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 业务总览列表数据
     */
    @Override
    public PageDataInfo businessOverviewList(SystemOverviewParams params, List<MultipleTableInfo> tableInfos) {
        Page page  =  new Page<>(params.getPageNum(), params.getPageSize());
        List<SystemOverviewListVo> list = monitorOverviewMapper.businessOverviewList(page,params, tableInfos);
        return new PageDataInfo(page, list);
    }


    /**
     * 业务总览列表下载
     * @param params 请求参数
     * @param tableInfos 表名
     * @return 业务总览列表下载数据
     */
    @Override
    public List<BusinessOverviewListVo> businessOverviewListExport(SystemOverviewParams params, List<MultipleTableInfo> tableInfos) {
        return monitorOverviewMapper.businessOverviewList(params, tableInfos);
    }


    /**
     * 查询地市id和名称
     * @param params 请求参数
     * @return 查询地市id和名称
     */
    @Override
    public List<SearchOptionVo> queryAreaCodeAndName(SystemOverviewParams params) {
//         系统地图配置参数，标识要查那一部分的地市
 		String projectMap = ParamResolver.getStr("khgz.home.cockpit.map");

        if (StringUtils.isNotBlank(projectMap)){
            params.setMapName(projectMap);
        }
        R<List<SearchOptionVo>> listR = remoteAreaService.queryAreaCodeAndName(params);
        if (listR.getCode() == CommonConstants.FAIL){
            log.error("远程调用配置系统获取地市code和名称失败,错误：{}",listR.getMsg());
        }
		return listR.getData();
    }
}
